package com.my.study.structures.recursion;

/**
 * @author Carlos
 * @version 1.0
 * @Description TODO
 * @date 2021/7/2 22:21
 **/
public class Test01 {

    public static void main(String[] args) {
        test(4);

        System.out.println("=============阶乘===========");

        int factorial = factorial(4);
        System.out.println(factorial);


        System.out.println("=============青蛙跳台阶==========");
        int steps = steps(3);
        System.out.println(steps);
    }

    private static void test(int n) {
        if (n > 2) {
            test(n - 1);
        }
        System.out.println("n=" + n);

    }

    /**
     * 阶乘
     *
     * @param n
     * @return
     */
    private static int factorial(int n) {
        if (n == 1) {
            return 1;
        } else {
            return factorial(n - 1) * n;
        }
    }

    /**
     * 青蛙跳台阶问题：
     * 青蛙每次只能跳一个台阶或者两个台阶，100个台阶一共有多少种跳发
     *
     *
     * @param n 跳的台阶数
     * @return  n个台阶的总跳法数
     */
    private static int steps(int n) {
        if (n == 1 || n == 2) {
            return n;
        } else {
            return steps(n - 1) + steps(n - 2);
        }
    }

}
